package context.config.imports;

import cn.stimd.spring.context.annotation.AdviceMode;
import cn.stimd.spring.context.annotation.AutoProxyRegistrar;
import cn.stimd.spring.context.annotation.Import;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 模拟@EnableTransactionManagement注解
 * <p>
 * Created by Stimd
 * 项目地址：https://gitee.com/stimd/spring-wheel
 * 公众号：Java编程探微
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(AutoProxyRegistrar.class)
public @interface EnableAopProxy {
    /**
     * 指定代理对象的生成模式，为true时表示使用CGLIB的子类代理，为false表示使用JDK接口代理。
     * 如果设置为true，将影响所有Spring托管的Bean，而不仅使用@Transactional标记的Bean
     */
    boolean proxyTargetClass() default false;

    /**
     * 指定事务的通知模式，默认为JDK动态代理
     */
    AdviceMode mode() default AdviceMode.PROXY;
}
